<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_Debug
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 * @version    $Id: Debug.php 23775 2011-03-01 17:25:24Z ralph $
 */

/**
 * Concrete class for generating debug dumps related to the output source.
 *
 * @category   Zend
 * @package    Zend_Debug
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */

class Zend_Debug {
	
	/**
	 * @var string
	 */
	protected static $_sapi = null;
	
	/**
	 * Get the current value of the debug output environment.
	 * This defaults to the value of PHP_SAPI.
	 *
	 * @return string;
	 */
	public static function getSapi() {
		if (self::$_sapi === null) {
			self::$_sapi = PHP_SAPI;
		}
		return self::$_sapi;
	}
	
	/**
	 * Set the debug ouput environment.
	 * Setting a value of null causes Zend_Debug to use PHP_SAPI.
	 *
	 * @param string $sapi
	 * @return void;
	 */
	public static function setSapi($sapi) {
		self::$_sapi = $sapi;
	}
	
	/**
	 * Debug helper function.  This is a wrapper for var_dump() that adds
	 * the <pre /> tags, cleans up newlines and indents, and runs
	 * htmlentities() before output.
	 *
	 * @param  mixed  $var   The variable to dump.
	 * @param  string $label OPTIONAL Label to prepend to output.
	 * @param  bool   $echo  OPTIONAL Echo output if true.
	 * @return string
	 */
	public static function dump($var, $label = null, $echo = true) {
		// format the label
		$label = ($label === null) ? '' : rtrim ( $label ) . ' ';
		
		// var_dump the variable into a buffer and keep the output
		ob_start ();
		var_dump ( $var );
		$output = ob_get_clean ();
		
		// neaten the newlines and indents
		$output = preg_replace ( "/\]\=\>\n(\s+)/m", "] => ", $output );
		if (self::getSapi () == 'cli') {
			$output = PHP_EOL . $label . PHP_EOL . $output . PHP_EOL;
		} else {
			if (! extension_loaded ( 'xdebug' )) {
				$output = htmlspecialchars ( $output, ENT_QUOTES );
			}
			
			$output = '<pre>' . $label . $output . '</pre>';
		}
		
		if ($echo) {
			echo ($output);
		}
		return $output;
	}

}
